package lucava.util;

/**
 * Classe utilitaire sur les chaines de caractères.
 */
public class StringUtils {

	/**
	 * Retourne la chaine avec le premier caractère en majuscule.
	 * 
	 * @param aString
	 *            , Chaine à modifier.
	 */
	public static String firstToUpper(String aString) {
		String result = "";
		if (!aString.isEmpty()) {
			result += aString.substring(0, 1).toUpperCase();
			result += aString.substring(1, aString.length());
		}

		return result;
	}

	/**
	 * Retourne la chaine avec le premier caractère en minuscule.
	 * 
	 * @param aString
	 *            , Chaine à modifier.
	 */
	public static String firstToLower(String aString) {
		String result = "";
		if (!aString.isEmpty()) {
			result += aString.substring(0, 1).toLowerCase();
			result += aString.substring(1, aString.length());
		}

		return result;
	}

	/**
	 * Retourne la chaine sous forme CamelCase.
	 * 
	 * @param aString
	 *            , Chaine à modifier.
	 */
	public static String toCamelCase(String aString) {
		StringBuilder sb = new StringBuilder();
		String[] x = aString.replaceAll("[^A-Za-z]", " ")
				.replaceAll("\\s+", " ").trim().split(" ");

		for (int i = 0; i < x.length; i++) {
			String r;
			if (i == 0) {
				r = StringUtils.firstToLower(x[i]);
				;
			} else {
				r = StringUtils.firstToUpper(x[i]);
			}
			sb.append(r);
		}
		return sb.toString();
	}

	/**
	 * Ajoute un article devant la chaine.
	 * 
	 * @param aString
	 *            , Chaine à modifier.
	 */
	public static String addArticleTo(String aString) {
		String article = "";

		// Si la chaine n'est pas vide
		if (!aString.isEmpty()) {

			// Récupération de la première lettre (en miniscule)
			String firstLetter = aString.substring(0, 1).toLowerCase();

			// Si la premiere lettre est une voyelle
			if (StringUtils.isVowel(firstLetter)) {
				article = "an";
			} else {
				article = "a";
			}
		}

		return article + StringUtils.firstToUpper(aString);
	}

	/**
	 * Indique si la chaine est une voyelle.
	 * 
	 * @param aString
	 *            , Chaine à tester.
	 */
	public static boolean isVowel(String aString) {
		boolean isVowel = false;

		if (aString.equals("a") || aString.equals("e") || aString.equals("i")
				|| aString.equals("o") || aString.equals("u")
				|| aString.equals("y")) {
			isVowel = true;
		}

		return isVowel;
	}
}
